001 /*
002 * Copyright 2005 Stephen J. McConnell.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
013 * implied.
014 *
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018
019 package net.dpml.state;
020
021 import java.io.Serializable;
022
023 /**
024 * Default implementation of an operation.
025 *
026 * @author <a href="http://www.dpml.net">Digital Product Meta Library</a>
027 * @version 1.0.1
028 */
029 public class DefaultOperation implements Operation, Serializable
030 {
031 private final String m_name;
032 private final String m_method;
033
034 /**
035 * Creation of a new operation.
036 * @param name the operation name
037 * @exception NullPointerException if the operation name is null
038 */
039 public DefaultOperation( final String name ) throws NullPointerException
040 {
041 this( name, null );
042 }
043
044 /**
045 * Creation of a new operation.
046 * @param name the operation name
047 * @param method the overriding method name
048 * @exception NullPointerException if the operation name is null
049 */
050 public DefaultOperation( final String name, String method ) throws NullPointerException
051 {
052 if( null == name )
053 {
054 throw new NullPointerException( "name" );
055 }
056 m_name = name;
057 m_method = method;
058 }
059
060 /**
061 * Return the action name.
062 * @return the name
063 */
064 public String getName()
065 {
066 return m_name;
067 }
068
069 /**
070 * Return the optional overriding method name. If the
071 * value returned is null the method shall be assumed to be the
072 * equivalent of "get[Name]().
073 * @return the operation method name
074 */
075 public String getMethodName()
076 {
077 return m_method;
078 }
079
080 /**
081 * Return a string representation of the instance.
082 * @return the string value
083 */
084 public String toString()
085 {
086 return "operation:" + m_name;
087 }
088
089 /**
090 * Compare this object to another for equality.
091 * @param other the other object
092 * @return true if the object is equal to this object
093 */
094 public boolean equals( Object other )
095 {
096 if( null == other )
097 {
098 return false;
099 }
100 else if( other instanceof DefaultOperation )
101 {
102 DefaultOperation operation = (DefaultOperation) other;
103
104 if( !m_name.equals( operation.getName() ) )
105 {
106 return false;
107 }
108 else if( null == m_method )
109 {
110 return null == operation.m_method;
111 }
112 else
113 {
114 return m_method.equals( operation.m_method );
115 }
116 }
117 else
118 {
119 return false;
120 }
121 }
122
123 /**
124 * Compute the hashcode for this instance.
125 * @return the hashcode value
126 */
127 public int hashCode()
128 {
129 int hash = getClass().hashCode();
130 hash ^= m_name.hashCode();
131 if( null != m_method )
132 {
133 hash ^= m_method.hashCode();
134 }
135 return hash;
136 }
137 }